热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

torch笔记六|Pytorch搭建一个简单的与运算神经网络

1.任务目标“与”运算,即and运算:输入两个数字,如果两数均为真值1,输出才为1,其他情况均输出0。使用p

1.任务目标

“与”运算,即and运算:输入两个数字,如果两数均为真值1,输出才为1,其他情况均输出0。使用pytorch搭建了一个简单的与运算神经网络,熟悉一下搭建网络的大体流程。

2.设计步骤

(1)导入需要的库

第一个导入torch包。导入numpy包,创建矩阵作为输入,并用np代替numpy,减少字母方便接下来编写代码。最后导入torch中的nn,并用nn替代。nn是神经网络(neural network)的缩写,是专门用来搭建网络的一个包。

# 1.导入需要的库
import torch #导入torch包
import numpy as np # 用np代替numpy
import torch.nn as nn # 用nn代替torch包里的nn

(2)构建输入集和理想输出集

使用numpy创建矩阵作为输入,包含(0,0),(0,1),(1,0),(1,1)的4种情况。并用同样的方法构建与输入对应的理想输出集0,0,0,1。

注意:一定要把numpy创建的数据转换成pytorch框架需要的tensor变量。在深度学习里,Tensor(张量)实际上就是一个多维数组,Tensor的目的是能够创造更高维度的矩阵、向量。

# 2.构建输入集和理想输出集 # 构建输入集
x = np.mat('0 0;' '0 1;' '1 0;' '1 1') # mat可以从字符串或列表中生成数组
x = torch.tensor(x).float() # 把输入转换成浮点型的tensor变量 # 构建对应的理想输出集
y = np.mat('0;' '0;' '0;' '1') # 创建与输入集对应的理想输出集
y = torch.tensor(y).float() # 把理想输出转换成浮点型的tensor变量

(3)搭建网络

使用nn包中的Sequential函数搭建网络。
输入层:要输入两个数字,所以设置2个输入节点。问题比较简单,隐藏层设置8个节点就够啦。 Linear(2,8)是生成具有2个输入节点,8个输出节点的输入层。
隐藏层1:ReLU()就是一个激活函数层,线性整流函数( ReLU)通常意义下指代数学中的斜坡函数,即 f(x)=max(0,x) 。
隐藏层2:Linear(8, 1)是有8个输入节点,1个输出节点的线性层,回收数据便于输出的作用。
输出层:Sigmoid函数是一个常见的S型函数,也称为S型生长曲线,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。
在这里插入图片描述

# 3.搭建网络 # 使用nn包中的Sequential函数搭建网络
my_Net = nn.Sequential(nn.Linear(2, 8), # 输入层 nn.ReLU(), # 激活函数层 nn.Linear(8, 1), # 线性 nn.Sigmoid()) # 输出层
print(myNet)

(4)设置优化器

传入网络参数(myNet.paramets)和学习率(lr),采用SGD方法训练优化。

# 4.设置优化器
# 传入网络参数和学习率,采用SGD方法训练
optimzer = torch.optim.SGD(myNet.parameters(), lr=0.05)

(5)设置代价函数

# 5.设置代价函数
# 使用MSE均方误差代价函数,设置代价函数
loss_func = nn.MSELoss()

(6)训练网络

设置一个3000次的循环,迭代训练我们搭建的网络。
首先将数据x扔给网络my_Net得到计算结果,将计算结果与理想输出做比较求出误差,清除上一次计算得到的梯度,让误差反向传播,启动我们设计的优化器,不断优化更新神经元的参数,不断降低梯度,使得误差最小。

# 6.训练网络 # 设置一个3000次的循环
for epoch in range(3000): out = my_Net(x) loss = loss_func(out, y) # 计算误差 optimzer.zero_grad() # 清除上一次的梯度 loss.backward() # 让误差反向传播 optimzer.step() # 让优化器工作

(7)测试结果

将输入和实际输出显示在屏幕。.data的意思就是只输出tensor中的数据,并不显示tensor中的其它参数。

print("input is\n %s" % x)
print("output is\n %s" % myNet(x).data)

3.运行结果

在这里插入图片描述由上图运行结果可以看出,输出的结果与理想的输出基本一致,训练的网络具有不错的效果。

完整代码附下:

# 1.导入需要的库
import torch #引入torch包
import numpy as np # 用np代替numpy
import torch.nn as nn # 用nn代替torch包里的nn# 2.构建输入集和理想输出集 # 构建输入集
x = np.mat('0 0;' '0 1;' '1 0;' '1 1')
x = torch.tensor(x).float() # 把输入转换成浮# 构建对应的理想输出集
y = np.mat('0;' '0;' '0;' '1') # 创建与输入
y = torch.tensor(y).float() # 把理想输出# 3.搭建网络 # 使用nn包中的Sequential函数搭建网络
myNet = nn.Sequential(nn.Linear(2, 8), nn.ReLU(), nn.Linear(8, 1), nn.Sigmoid())
print(myNet) # 4.设置优化器 # 传入网络参数和学习率,采用SGD方法训练
optimzer = torch.optim.SGD(myNet.parameters(), lr=0.05)# 使用MSE均方误差代价函数,设置代价函数
loss_func = nn.MSELoss() # 5.训练网络 # 设置一个3000次的循环
for epoch in range(3000): out = myNet(x) loss = loss_func(out, y) # 计算误差 optimzer.zero_grad() # 清除上一次的梯度 loss.backward() # 让误差反向传播 optimzer.step() # 让优化器工作 # 6.测试 print("input is\n %s" % x)
print("output is\n %s" % myNet(x).data)


推荐阅读
  • DNNBrain:北师大团队出品,国内首款用于映射深层神经网络到大脑的统一工具箱...
    导读深度神经网络(DNN)通过端到端的深度学习策略在许多具有挑战性的任务上达到了人类水平的性能。深度学习产生了具有多层抽象层次的数据表示;然而,它没有明确地提供任何关 ... [详细]
  • 线性代数:机器学习背后的优化原理线性代数作为数学的一个分支,广泛应用于科学和工程中,掌握好线性代数对于理解和从事机器学习算法相关工作是很有 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 以下不是python文件读写方法的是Python 文件I/O
    Python文件IO本章只讲述所有基本的IO函数,更多函数请参考Python标准文档。打印到屏幕最简单的输出方法是用print语句,你可以给它传递 ... [详细]
  • 我正在使用数组列表通过构建一个交互式菜单供用户选择来存储来自用户输入的值。到目前为止,我的两个选择是为用户提供向列表输入数据和读取列表的全部内容。到目前为止,我创建的代码由两个类组成。 ... [详细]
  • AI 学习路线:从Python开始机器学习
    AI 学习路线:从Python开始机器学习 ... [详细]
  • 题目:Givenanintegerarray,youneedtofindone continuoussubarray thatifyouonlysortthissubarrayin ... [详细]
  • 深度强化学习Policy Gradient基本实现
    全文共2543个字,2张图,预计阅读时间15分钟。基于值的强化学习算法的基本思想是根据当前的状态,计算采取每个动作的价值,然 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • Pyhotn3基础笔记(上卷)吉多范罗苏姆(GuidovanRossum)一.解释器Python的解释器如今有多个语言的实现,包括&#x ... [详细]
  • 自定义RecyclerView添加EmptyView
    你知道RecyclerView里没有Em ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
author-avatar
玄天战猫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有